import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description: 牛客网: BD4 蘑菇阵
 * <a href="https://www.nowcoder.com/practice/ed9bc679ea1248f9a3d86d0a55c0be10?tpId=143&tqId=33928&ru=/exam/oj">...</a>
 * User: DELL
 * Date: 2023-05-26
 * Time: 22:58
 */
public class Main {

    /**
     * 解题思路: (动态规划)
     * 本题读题之后,毫无疑问要用的是动态规划,那么动态规划最重要的是状态的定义和状态转移方程,
     * 因为本题要求的是不碰到蘑菇走到 B 家的概率,因此状态定义围绕概率展开较为合适,具体如下:
     * 状态定义: dp[i][j] = 不碰到蘑菇的情况下从(1,1)走到(i,j)的概率
     * 状态转移: 当(i,j)为蘑菇的时候:
     *          dp[i][j] = 0
     *          当(i,j)不为蘑菇的时候:
     *          dp[i][j] = dp[i-1][j]*(j==m? 1:0.5) + dp[i][j-1]*(i==n? 1:0.5)
     *          (这里的判断就是如果到达的是边界,那么就只能走唯一的一条路,就乘1,否则乘0.5)
     *          (这里面还应该注意 i!=1 && j!=1, 因为 dp[1][1] = 1.0)
     * 初始化: dp[1][1] = 1.0
     * 返回值: dp[n][m]
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            //标记蘑菇的位置
            boolean[][] flag = new boolean[n+1][m+1];
            int k = scanner.nextInt();
            while (k-- != 0) {
                flag[scanner.nextInt()][scanner.nextInt()] = true;
            }
            //计算到达右下角而没有踩到蘑菇的概率
            System.out.printf("%.2f\n", solve(flag,n,m));
        }
    }

    /**
     * 计算到达右下角而没有踩到蘑菇的概率
     * @param flag  标记蘑菇位置的矩阵
     * @param n     草地的行数
     * @param m     草地的列数
     * @return
     */
    private static double solve(boolean[][] flag, int n, int m) {
        //状态定义
        double[][] dp = new double[n+1][m+1];
        //初始化
        dp[1][1] = 1.0;
        //状态转移
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (!(i == 1 && j == 1)) {
                    //这里只需要处理当前草地上不是蘑菇的情况
                    if (!flag[i][j]) {
                        dp[i][j] = dp[i-1][j]*(j==m? 1:0.5) + dp[i][j-1]*(i==n? 1:0.5);
                    }
                }
            }
        }
        //返回
        return dp[n][m];
    }
}
